#!groovy

/*

This Jenkins job runs clang-tidy on the code base

See https://jenkins.tjhei.info/job/dealii-tidy/ for details.

*/

/*
Settings to apply inside Jenkins:
  - discover pull requests (remove branches/master)
  - Strategy: merged PR
  - enable "Disable GitHub Multibranch Status Plugin"
  - trigger build on pull request comment: .* /rebuild.* (without space!)
  - Jenkinsfile: choose contrib/ci/Jenkinsfile.tidy
  - scan: every 4 hours
  - discard: 5+ items
*/

// load library https://github.com/tjhei/jenkins-stuff to provide
// killold.killOldBuilds() function:
@Library('tjhei') _

pipeline
{
  agent none

  stages
  {
    stage("abort old")
    {
      agent none
      steps
      {
        githubNotify context: 'tidy', description: 'initializing...',  status: 'PENDING'
        // kill older builds in this PR:
        script { killold.killOldBuilds() }
      }
    }

    stage("main")
    {
      agent
      {
        docker
        {
          image 'tjhei/candi-base-clang'
        }
      }

      post { cleanup { cleanWs() } }

      stages
      {
        stage("check")
        {
          when {
            allOf {
              not {branch 'master'}
            }
          }

          steps
          {
            githubNotify context: 'tidy', description: 'pending...',  status: 'PENDING'
            sh '''
               wget -q -O - https://api.github.com/repos/dealii/dealii/issues/${CHANGE_ID}/labels | grep 'ready to test' || \
               { echo "This commit will only be tested when it has the label 'ready to test'. Trigger a rebuild by adding a comment that contains '/rebuild'..."; exit 1; }
               '''
          }
          post
          {
            failure
            {
              githubNotify context: 'tidy', description: 'need ready to test label and /rebuild',  status: 'PENDING'
              script
              {
                currentBuild.result='NOT_BUILT'
              }
            }
          }
        }

        stage('build')
        {
          steps
          {
            timeout(time: 2, unit: 'HOURS')
            {
              sh "echo \"building on node ${env.NODE_NAME}\""
              sh '''#!/bin/bash
                    mkdir build && cd build
                    $WORKSPACE/contrib/utilities/run_clang_tidy.sh $WORKSPACE
                 '''
              githubNotify context: 'tidy', description: 'OK',  status: 'SUCCESS'
            }
          }

          post
          {
            failure
            {
              githubNotify context: 'tidy', description: 'build failed',  status: 'FAILURE'
            }
          }
        }

      }
    }
  }
}
